#pragma once

#include "CoreMinimal.h"
#include "AutoShapeConfigBase.generated.h"

class UAutoShapeComponent;
class FPrimitiveSceneProxy;
struct FCollisionShape;

/**
 * 
 */
UCLASS(Blueprintable, Abstract, EditInlineNew, CollapseCategories)
class BASECLASS_API UAutoShapeConfigBase : public UObject
{
	GENERATED_BODY()

public:
	//~ Begin UPrimitiveComponent Interface.
	virtual FPrimitiveSceneProxy* CreateSceneProxy(UAutoShapeComponent* Owner);
	virtual bool IsZeroExtent(const UAutoShapeComponent* Owner) const;
	virtual struct FCollisionShape GetCollisionShape(const UAutoShapeComponent* Owner, float Inflation = 0.0f) const;
	virtual bool AreSymmetricRotations(const UAutoShapeComponent* Owner, const FQuat& A, const FQuat& B, const FVector& Scale3D) const;
	//~ End UPrimitiveComponent Interface.

	//~ Begin USceneComponent Interface
	virtual FBoxSphereBounds CalcBounds(const UAutoShapeComponent* Owner, const FTransform& LocalToWorld) const;
	virtual void CalcBoundingCylinder(const UAutoShapeComponent* Owner, float& CylinderRadius, float& CylinderHalfHeight) const;
	//~ End USceneComponent Interface

	//~ Begin UShapeComponent Interface
	virtual void UpdateBodySetup(UAutoShapeComponent* Owner);
	//~ End UShapeComponent Interface
};
